{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 学习曲线\n",
    "> 随着训练样本的逐渐增多，算法训练处的模型的表现能力"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(666)\n",
    "x = np.random.uniform(-3.0, 3.0, size=100)\n",
    "X = x.reshape(-1, 1)\n",
    "y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.axis('on')\n",
    "plt.scatter(x, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 学习曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(75, 1)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape # 训练集:测试集=3:1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "train_score = []\n",
    "test_score = []\n",
    "for i in range(1, 76):\n",
    "    lin_reg = LinearRegression()\n",
    "    lin_reg.fit(X_train[:i], y_train[:i])\n",
    "    # 从1~75取样本数，观察随着训练集样本数增加，训练出的模型在测试集上的表现(用均方误差来表示)\n",
    "    y_train_predict = lin_reg.predict(X_train[:i])\n",
    "    train_score.append(mean_squared_error(y_train[:i], y_train_predict))\n",
    "    # 虽然这里用地每次的测试集是一样地，但是模型lin_reg每次都是针对不同数目的训练样本的\n",
    "    y_test_predict = lin_reg.predict(X_test)\n",
    "    test_score.append(mean_squared_error(y_test, y_test_predict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXzc9X3n8dd37kO35PtA5jJgTAwIF0qaQAkEkjTHNqUJpaW5SHezbZpHc8B2kzyyfXQf7LabTbJtkyUJbbJJSCihzQWEO3cgNjhgsIltMLZ8SZYtWcfc890/vr+xZFmSZWmkmZ9+7+fjMY/R3J8ZzbznM5/5ze9nrLWIiIj/hGpdgIiIzIwCXETEpxTgIiI+pQAXEfEpBbiIiE9F5vPGOjo6bGdn53zepIiI723evPmwtXbR+OPnNcA7OzvZtGnTfN6kiIjvGWNemeh4jVBERHxKAS4i4lMKcBERn5rXGbiIyOkqFAp0d3eTzWZrXcqcSyQSrFy5kmg0Oq3zK8BFpK51d3fT2NhIZ2cnxphalzNnrLX09fXR3d3NmjVrpnUZjVBEpK5ls1na29sXdHgDGGNob28/rU8aCnARqXsLPbwrTvd++jPA+3bBrsdqXYWISE35M8B//n/gvvfXugoRCYD+/n7+6Z/+6bQv94Y3vIH+/v45qGjUKQPcGHOXMabHGLN1zHFtxpiHjTE7vP3WOa1yvMII5Abn9SZFJJgmC/BSqTTl5e6//35aWlrmqixgeh34vwDXjzvuNuBRa+05wKPe4flTzEIxA+XyvN6siATPbbfdxq5du9iwYQOXXXYZV199NTfddBPr168H4K1vfSuXXnop69at48477zx+uc7OTg4fPszu3bs5//zzed/73se6deu47rrryGQyVantlIsRWmt/bIzpHHf0W4CrvL+/AjwBfKwqFU1HMeftZyCWnrebFZHa+tT3nueF/ceqep0XLG/ik7+3btLT77jjDrZu3cqWLVt44okneOMb38jWrVuPL+p311130dbWRiaT4bLLLuP3f//3aW9vP+E6duzYwd13380Xv/hFbrzxRr797W9z8803z7r2mc7Al1hrDwB4+4snO6Mx5lZjzCZjzKbe3t4Z3tw4RW8xm/xIda5PRGSaNm7ceMJy2p/73Od41atexeWXX87evXvZsWPHSZdZs2YNGzZsAODSSy9l9+7dVallzn/IY629E7gToKurqzpbUK504AUFuEiQTNUpz5d0evRT/xNPPMEjjzzCL37xC1KpFFddddWEy3HH4/Hjf4fD4aqNUGbagR8yxiwD8PZ7qlLNdFU6cAW4iMyxxsZGBgcnXmhiYGCA1tZWUqkU27dv55e//OW81jbTDvy7wC3AHd7+d6pW0XSoAxeRedLe3s6VV17JhRdeSDKZZMmSJcdPu/766/nCF77ARRddxNq1a7n88svntbZTBrgx5m7cF5Ydxphu4JO44L7HGPMeYA/wB3NZ5Ek0AxeRefSNb3xjwuPj8TgPPPDAhKdV5twdHR1s3Xp8KWw+/OEPV62u6SyF8s5JTrqmalWcLnXgIiI+/SWmZuAiIn4NcK8D1whFRALMpwGuDlxExH8BXipCuej+VoCLSID5MMBzo39rhCIiAea/AC+OCfDCcO3qEJFAmOnqZAE+85nPMDIyd42m/wK8kJn4bxGROVDPAe6/jRoXx6xnQCMUEZljY1cne+2117J48WLuuececrkcb3vb2/jUpz7F8PAwN954I93d3ZRKJT7+8Y9z6NAh9u/fz9VXX01HRwePP/541WvzYYBrhCISWA/cBgefq+51Ll0PN9wx6cljVyf70EMPce+99/LUU09hreXNb34zP/7xj+nt7WX58uX84Ac/ANw6Upqbm/n0pz/N448/TkdHR3Vr9vhvhDK2A9cIRUTm0UMPPcRDDz3ExRdfzCWXXML27dvZsWMH69ev55FHHuFjH/sYP/nJT2hubp6XevzdgWuEIhIsU3TK88Fay+23387733/yNnk3b97M/fffz+233851113HJz7xiTmvx78deKxBIxQRmXNjVyf7+te/nrvuuouhoSEA9u3bR09PD/v37yeVSnHzzTfz4Q9/mKeffvqky84F/3bgyVaNUERkzo1dnewNN9zATTfdxBVXXAFAQ0MDX/va19i5cycf+chHCIVCRKNRPv/5zwNw6623csMNN7Bs2bI5+RLTWFudjeRMR1dXl920adPsruT5f4d/vQWWXgSZfvhQlb/QEJG6sm3bNs4///xalzFvJrq/xpjN1tqu8ef14QjF68BTbRqhiEig+TDAvRm4RigiEnA+DPDKDLzNrcyqXK5tPSIy5+Zz1FtLp3s/fRjgXgeeavMOqwsXWcgSiQR9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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot([i for i in range(1, 76)], np.sqrt(train_score), label=\"train\")\n",
    "plt.plot([i for i in range(1, 76)], np.sqrt(test_score), label=\"test\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 封装学习曲线的计算函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_learning_curve(algo, X_train, X_test, y_train, y_test):\n",
    "    \"\"\"直接根据训练集和测试集得到学习曲线(即随着训练集的增大)，模型在测试集上的均方误差变化曲线\"\"\"\n",
    "    train_score = []\n",
    "    test_score = []\n",
    "    for i in range(1, len(X_train)+1):\n",
    "        algo.fit(X_train[:i], y_train[:i])\n",
    "    \n",
    "        y_train_predict = algo.predict(X_train[:i])\n",
    "        train_score.append(mean_squared_error(y_train[:i], y_train_predict))\n",
    "    \n",
    "        y_test_predict = algo.predict(X_test)\n",
    "        test_score.append(mean_squared_error(y_test, y_test_predict))\n",
    "        \n",
    "    plt.plot([i for i in range(1, len(X_train)+1)], \n",
    "                               np.sqrt(train_score), label=\"train\")\n",
    "    plt.plot([i for i in range(1, len(X_train)+1)], \n",
    "                               np.sqrt(test_score), label=\"test\")\n",
    "    plt.legend()\n",
    "    plt.axis([0, len(X_train)+1, 0, 4])\n",
    "    plt.show()\n",
    "    \n",
    "plot_learning_curve(LinearRegression(), X_train, X_test, y_train, y_test) # 欠拟合，因为不管在训练集还是测试集，均方差稳定值都比较大，在1.6左右"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 把学习曲线和Pipeline结合到一起"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.pipeline import Pipeline\n",
    "\n",
    "def PolynomialRegression(degree):\n",
    "    return Pipeline([\n",
    "        (\"poly\", PolynomialFeatures(degree=degree)),\n",
    "        (\"std_scaler\", StandardScaler()),\n",
    "        (\"lin_reg\", LinearRegression())\n",
    "    ])\n",
    "\n",
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "plot_learning_curve(poly2_reg, X_train, X_test, y_train, y_test) # 正合适，均方差稳定值都在1左右"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "poly20_reg = PolynomialRegression(degree=20)\n",
    "plot_learning_curve(poly20_reg, X_train, X_test, y_train, y_test) # 下面是过拟合的情况，在训练集上表现好，在测试集上表现很差，波动太大"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
